package reflect;

import reflect.annotations.AutoRunMethod;

import java.lang.reflect.Method;

/*使用反射机制调用person类中所有被AutoRunMethod标注的方法指定次数
次数由注解参数决定
 */
public class Test03 {
    public static void main(String[] args) throws Exception{
        //获取类名
        Class cla = Class.forName("reflect.Person");
        //对象实例化
        Object object = cla.newInstance();
        //获取类的所有方法
        Method[] methods = cla.getMethods();
        //遍历所有方法
        for (Method method : methods){
            //获取每个方法的名字
            String name = method.getName();
            //判断是否被注解了
            boolean b = method.isAnnotationPresent(AutoRunMethod.class);
            //如果被注解了
            if (b){
                //获取哪些方法被注解了
                AutoRunMethod annotation = method.getAnnotation(AutoRunMethod.class);
                //拿到被注解方法中value的值
                int value = annotation.value();
                System.out.println(name+"被标注的次数:" + value);
                //将注解的次数应用于方法上，执行方法
                for (int i=0; i<value; i++){
                    //执行该方法
                    method.invoke(object);
                }

            }
        }
    }
}
